package com.cyy.admin.service;

import com.cyy.admin.entity.CyyUserEntity;
import com.cyy.admin.entity.SysSystemlogEntity;
import com.cyy.admin.repository.SysSystemlogRepository;
import com.cyy.util.AddressUtils;
import com.cyy.util.RequestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;


/**
 *
 * @author chenyuyi
 * @date 2021-12-12 13:11:18
 */
@Service
public class SysSystemlogService  {

    @Autowired
    private SysSystemlogRepository sysSystemlogRepository;

    public void saveLoginLog(CyyUserEntity user, String login) {
        SysSystemlogEntity systemlog = new SysSystemlogEntity();
        systemlog.setTitle(login);
        systemlog.setContent(login);
        systemlog.setAccount(user.getUserName());
        systemlog.setType(1);
        systemlog.setLoginip(AddressUtils.getIp(RequestUtils.getRequest()));
        systemlog.setLogintime(new Date());

        String address = null;
        if(!systemlog.getLoginip().equals("127.0.0.1") && !systemlog.getLoginip().equals("localhost")){
            //获取指定IP的区域位置
            try {
                AddressUtils.getCityInfo(AddressUtils.getIp(RequestUtils.getRequest()));
            } catch (Exception e) {
                e.printStackTrace();
            }
            systemlog.setLoginarea(address);

            //异地登录的判断方法为：先比较本次登录和上次登录的区域位置，如果不一致，说明是异地登录；如果获取不到区域，则比较IP地址，如果IP地址和上次的不一致，则是异地登录
            SysSystemlogEntity firstSystemlog = sysSystemlogRepository.findFirstByOrderByLogintimeDesc(user.getLoginName());
            if(firstSystemlog!=null){
                if(StringUtils.isNotBlank(address) && StringUtils.isNotBlank(firstSystemlog.getLoginarea())){
                    if(!address.equals(firstSystemlog.getLoginarea())){
                        systemlog.setDiffarealogin("y");
                    }
                }else if(StringUtils.isNotBlank(systemlog.getLoginip()) && StringUtils.isNotBlank(firstSystemlog.getLoginip())){
                    if(!systemlog.getLoginip().equals(firstSystemlog.getLoginip())){
                        systemlog.setDiffarealogin("y");
                    }
                }
            }
        }
       sysSystemlogRepository.save(systemlog);
    }
}